//为什么要从后往前做方案数问题
//这是由于如果从前往后做，会优先选择字典序大的数(例如有w1 + w2 = w3，会优先选择含有w3的方案)

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1010;
int a[N], w[N];
int f[N][N];
int n, m;

int main()
{
    cin >> n >> m;
    //先读取，然后从后往前做dp
    for(int i = 1; i <= n; ++i) cin >> a[i] >> w[i];
    for(int i = n; i > 0; --i)
        for(int j = 0; j <= m; ++j)
        {
            //在没有优化的情况下，装不下第i个物品的时候从i中选择最大价值和i-1中选择最大价值是一样的
            f[i][j] = f[i + 1][j];
            if(j >= a[i]) f[i][j] = max(f[i][j], f[i + 1][j - a[i]] + w[i]);
        }
    int s = m;
    for(int i = 1; i <= n; ++i)
        if(s >= a[i] && f[i][s] == f[i + 1][s - a[i]] + w[i])
        {
            cout << i << ' ';
            s-= a[i];
        }
    cout << endl;
    return 0;
}